﻿// ABC239 G, Builder Takahashi.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>

using  namespace std;


/*

http://oj.daimayuan.top/course/23/problem/1073

给定一张 n 个点 m 条边的连通无向图，要求在某些点（不能为 1 号点或者 n 号点）设立障碍，在 i 号点建立障碍的费用为 ci，要使得 1 号点和 n 号点不连通，求最小花费的方案。

输入格式
第一行两个整数n,m(3≤n≤100,n−1≤m≤n(n−1)2−1)。

接下来m行，每行两个数ai,bi(1≤ai<bi≤n)，保证没有重边自环，并且 1 与 n 不直接相连。

接下来一行n个整数c1,c2,…,cn(0≤ci≤109)，保证c1=cn=0。

输出格式
第一行输出一个数，表示最小的花费。

接下来输出一个数 k，表示建立障碍的个数。接下来一行 k 个数，表示建立障碍的 k 个点。

样例输入
5 5
1 2
2 3
3 5
2 4
4 5
0 8 3 4 0
样例输出
7
2
3 4

*/


/*
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

const int V = 20100;
const int E = 201000;
template<typename T>
struct FlowGraph {
	int s, t, vtot;
	int head[V], etot;
	int dis[V], cur[V];
	struct edge {
		int v, nxt;
		T f;
	} e[E * 2];
	void addedge(int u,int v, T f, T f2 = 0){
		e[etot]= {v, head[u], f}; head[u] = etot++;
		e[etot]= {u, head[v], f2}; head[v] = etot++;
	}

	bool bfs() {
		for (int i = 1; i <= vtot; i++) {
			dis[i] = 0;
			cur[i] = head[i];
		}
		queue<int> q;
		q.push(s); dis[s] = 1;
		while (!q.empty()) {
			int u = q.front(); q.pop();
			for (int i = head[u]; ~i; i = e[i].nxt) {
				if (e[i].f && !dis[e[i].v]) {
					int v = e[i].v;
					dis[v] = dis[u] + 1;
					if (v == t) return true;
					q.push(v);
				}
			}
		}
		return false;
	}

	T dfs(int u, T m) {
		if (u == t) return m;
		T flow = 0;
		for (int i = cur[u]; ~i; cur[u] = i = e[i].nxt)
			if (e[i].f && dis[e[i].v] == dis[u] + 1) {
				T f = dfs(e[i].v, min(m, e[i].f));
				e[i].f -= f;
				e[i ^ 1].f += f;
				m -= f;
				flow += f;
				if (!m) break;
			}
		if (!flow) dis[u] = -1;
		return flow;
	}
	T dinic(){
		T flow=0;
		while (bfs()) flow += dfs(s, numeric_limits<T>::max());
		return flow;
	}
	void init(int s_, int t_, int vtot_) {
		s = s_;
		t = t_;
		vtot = vtot_;
		etot = 0;
		for (int i = 1; i <= vtot; i++) head[i] = -1;
	}
};

FlowGraph<ll> g;
int n, m;
int main() {
	scanf("%d%d", &n, &m);
	g.init(2, 2 * n - 1, 2 * n);
	for (int i = 1; i <= m; i++) {
		int u, v;
		scanf("%d%d", &u, &v);
		g.addedge(2 * v, 2 * u - 1, 1ll << 60);
		g.addedge(2 * u, 2 * v - 1, 1ll << 60);
	}
	for (int i = 1; i <= n; i++) {
		int c;
		scanf("%d" ,&c);
		g.addedge(2 * i - 1, 2 * i, c);
	}
	printf("%lld\n", g.dinic());
	vector<int> ans;
	for (int i = 2; i < n; i++) {
		if (g.dis[2 * i - 1] > 0 && g.dis[2 * i] == 0) {
			ans.push_back(i);
		}
	}
	printf("%d\n", (int)ans.size());
	for (auto x : ans) printf("%d ", x);
	puts("");
}
*/

int main()
{
    std::cout << "Hello World!\n";
}

 